package com.wyx.springvueadmin.common;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.Map;

/**
 * jwt工具类
 */
public class jwtConfig {

    /**
     * 生成token加密令牌
     * @param params    =>  存入的数据
     * @param secretKey =>  签名的密钥
     * @param ttlMills  =>  过期时间(毫秒)
     * @return 生成的jwt token
     */
    public static String createToken(Map<String, Object> params, String secretKey, long ttlMills){

        //1.声明加密的算法
        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
        //2.声明过期时间
        long expMillis = System.currentTimeMillis() + ttlMills;
        Date exp = new Date(expMillis);
        //3.生成jwt
        String token = Jwts.builder()
                //配置jwt中需要保存的数据
                .setClaims(params)
                //配置加密算法&加密的key
                .signWith(signatureAlgorithm, secretKey.getBytes(StandardCharsets.UTF_8))
                //配置过期时间
                .setExpiration(exp)
                //根据配置信息生成jwt
                .compact();

        return token;
    }

    /**
     * 验证jwt, 解析token
     * @param token      =>  加密令牌
     * @param secretKey  =>  密钥
     * @return 解析的结果集
     */
    public static Claims parseToken(String token, String secretKey){

        Claims claims = Jwts.parser()
                // 设置签名的秘钥
                .setSigningKey(secretKey.getBytes(StandardCharsets.UTF_8))
                // 设置需要解析的jwt
                .parseClaimsJws(token).getBody();

        return claims;
    }

}

